/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.todoterreno.beans;

import com.todoterreno.dao.GestionImagenesInter;
import com.todoterreno.dao.impl.GestionImagenesInterDao;
import com.todoterreno.datamodel.CasaTerrenoDataModel;
import com.todoterreno.datamodel.VentaDataModel;
import com.todoterreno.model.CasaTerreno;
import com.todoterreno.model.CasaTerrenoDet;
import com.todoterreno.model.Venta;
import java.io.*;
import java.util.LinkedList;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;
import org.primefaces.context.RequestContext;
import org.primefaces.event.FileUploadEvent;

/**
 *
 * @author davex
 */
public class LoginPropBean implements Serializable{

    private String rootfoto="/home/davidpanel/fotos/";
    private String rootdet="/home/davidpanel/detalle/";
    private String rootplots="/home/davidpanel/plots/";
    private String user;
    private String password;
    private CasaTerrenoDet casaDet;
    private List<Venta> listaventa;
    private List<CasaTerreno> listacasas;
    private CasaTerreno casaTerreno;
    private Venta[] arventas;
    private VentaDataModel ventaModel;
    private CasaTerrenoDataModel casasModel;
    
    private static GestionImagenesInter gii=new GestionImagenesInterDao();
    private boolean renderlog=true;
    private boolean renderop=false;
    
    
    private String idcasater; 
    private String nombrefoto; 
    private String precio;
    private String descripcion;
    private String cuartos;
    private String banios;
    private String tamanio;
    private String tipo;
    private String fecha; 
    private String idestado; 
    private String direccion;
    private String nombreplano;
    
    private String idDet;
    private String codcasa;
    private List<String> fotosDet=new LinkedList<String>();
    private String descDet;
    
    public LoginPropBean() {
       
    }
    
    public void updateData(){
        listacasas=gii.consultarTodasCasas();
        System.out.println("SIZE Venta: "+listacasas.size());
        casasModel=new CasaTerrenoDataModel(listacasas);
    }
    
    public void validarCredenciales(){
        
        System.out.println("Entro validar");
        FacesContext fc=FacesContext.getCurrentInstance();
        
        if(!"".equals(user)){
            if(!"".equals(password)){
                if(user.equals("neto")&&password.equals("news")){
                    renderlog=false;
                    renderop=true;
                    
                    RequestContext rq=RequestContext.getCurrentInstance();
                    rq.update(":form:panelLogin");
                    rq.update(":form:opAdmin");
                    
                }else{
                    FacesMessage fm=new FacesMessage(FacesMessage.SEVERITY_ERROR, "", "Usuario o contraseña incorrecta");
                    fc.addMessage(null, fm);
                }
            }else{
                FacesMessage fm=new FacesMessage(FacesMessage.SEVERITY_ERROR, "", "La conraseña no ha sido ingresado");
                fc.addMessage(null, fm);
            }
        }else{
            FacesMessage fm=new FacesMessage(FacesMessage.SEVERITY_ERROR, "", "El usuario no ha sido ingresado");
            fc.addMessage(null, fm);
        }
    }
    
    public void mostrarTablaVentas(){
        
        listaventa=gii.consultarCasasVenta();
        System.out.println("SIZE Venta: "+listaventa.size());
        ventaModel=new VentaDataModel(listaventa);
        RequestContext reqCon=RequestContext.getCurrentInstance();
        reqCon.execute("verVenta.show()");
        
    }
    
    public void mostrarTablaCasas(){
        listacasas=gii.consultarTodasCasas();
        System.out.println("SIZE Venta: "+listacasas.size());
        casasModel=new CasaTerrenoDataModel(listacasas);
        RequestContext reqCon=RequestContext.getCurrentInstance();
        reqCon.execute("verCasas.show()");
    }
    
    public void agregarCasa(){
        
        System.out.println("Inicia agregar casa...");
        casaTerreno=new CasaTerreno();
        idcasater="ES"+gii.consultaseq("select nextval('terreno.seqcasa')");
//        idcasater="ES"+gii.consultaseq("SELECT `AUTO_INCREMENT` nextval"
//+" FROM  INFORMATION_SCHEMA.TABLES" 
//+" WHERE TABLE_SCHEMA = 'terreno'"
//+" AND   TABLE_NAME   = 'casaterreno'");
        casaTerreno.setIdcasater(idcasater);
        
        casaTerreno.setNombrefoto(nombrefoto);
        casaTerreno.setPrecio(precio);
        casaTerreno.setDescripcion(descripcion);
        casaTerreno.setCuartos(cuartos);
        casaTerreno.setBanios(banios);
        casaTerreno.setTamanio(tamanio);
        casaTerreno.setTipo(tipo);
        
        casaTerreno.setIdestado("1");
        casaTerreno.setDireccion(direccion);
        
        casaTerreno.setNombreplano(nombreplano);
        
        System.out.println("Obj1: "+casaTerreno.toString());
        
        casaDet=new CasaTerrenoDet();
        casaDet.setIdDet("8");
        casaDet.setFotosDet(fotosDet);
        casaDet.setDescDet(descDet);
        casaDet.setCodcasa(idcasater);
        System.out.println("Obj2: "+casaDet.toString());
        boolean isIn = gii.insertarCasaTerreno(casaTerreno, casaDet);
        FacesContext fc=FacesContext.getCurrentInstance();
        if(isIn){
            updateData();
            FacesMessage fm=new FacesMessage(FacesMessage.SEVERITY_INFO, "", "Casa adicionada exitosamente");
            fc.addMessage(null, fm);
        }else{
            FacesMessage fm=new FacesMessage(FacesMessage.SEVERITY_ERROR, "", "Error al insertar dato");
            fc.addMessage(null, fm);
        }
        
        System.out.println("Termina agregar casa..."+isIn);
    }
    
    public void logout(){
        HttpSession ses = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(true);
        ses.invalidate();
        ExternalContext context = javax.faces.context.FacesContext.getCurrentInstance().getExternalContext();
        String ctxPath = ((ServletContext) context.getContext()).getContextPath();
        context.getSessionMap().clear();

        try {
            context.redirect(ctxPath + "/pages/loginProp.xhtml");
            return;
        } catch (IOException ex) {
            System.out.println("Error de logout [" + ex.getMessage() + "]");
        }
    }
    
    public void handleFileUpload1(FileUploadEvent event) {
        try{
            fotosDet.add(event.getFile().getFileName());
            copyFile(event.getFile().getFileName(), event.getFile().getInputstream(),rootdet);
        }catch(Exception e){
            e.printStackTrace();
        }
    }
    
    public void handleFileUpload2(FileUploadEvent event) {
        try{
            nombreplano=event.getFile().getFileName();
            copyFile(event.getFile().getFileName(), event.getFile().getInputstream(),rootplots);
        }catch(Exception e){
            e.printStackTrace();
        }
    }
    
    public void handleFileUpload3(FileUploadEvent event)  {
        try{
            nombrefoto=event.getFile().getFileName();
            copyFile(event.getFile().getFileName(), event.getFile().getInputstream(),rootfoto);
        }catch(Exception e){
            e.printStackTrace();
        }
    }
    
    public void copyFile(String fileName, InputStream in, String destination) {
        try {


// write the inputStream to a FileOutputStream
            OutputStream out = new FileOutputStream(new File(destination + fileName));

            int read = 0;
            byte[] bytes = new byte[1024];

            while ((read = in.read(bytes)) != -1) {
                out.write(bytes, 0, read);
            }

            in.close();
            out.flush();
            out.close();

            System.out.println("New file created!");
        } catch (IOException e) {
            System.out.println(e.getMessage());
        }
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public boolean isRenderlog() {
        return renderlog;
    }

    public void setRenderlog(boolean renderlog) {
        this.renderlog = renderlog;
    }

    public boolean isRenderop() {
        return renderop;
    }

    public void setRenderop(boolean renderop) {
        this.renderop = renderop;
    }

    public String getUser() {
        return user;
    }

    public void setUser(String user) {
        this.user = user;
    }

    public List<Venta> getListaventa() {
        return listaventa;
    }

    public void setListaventa(List<Venta> listaventa) {
        this.listaventa = listaventa;
    }

    public Venta[] getArventas() {
        return arventas;
    }

    public void setArventas(Venta[] arventas) {
        this.arventas = arventas;
    }

    public VentaDataModel getVentaModel() {
        return ventaModel;
    }

    public void setVentaModel(VentaDataModel ventaModel) {
        this.ventaModel = ventaModel;
    }

    public CasaTerrenoDataModel getCasasModel() {
        return casasModel;
    }

    public void setCasasModel(CasaTerrenoDataModel casasModel) {
        this.casasModel = casasModel;
    }

    public List<CasaTerreno> getListacasas() {
        return listacasas;
    }

    public void setListacasas(List<CasaTerreno> listacasas) {
        this.listacasas = listacasas;
    }

    public String getBanios() {
        return banios;
    }

    public void setBanios(String banios) {
        this.banios = banios;
    }

    public String getCuartos() {
        return cuartos;
    }

    public void setCuartos(String cuartos) {
        this.cuartos = cuartos;
    }

    public String getDescripcion() {
        return descripcion;
    }

    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

    public String getDireccion() {
        return direccion;
    }

    public void setDireccion(String direccion) {
        this.direccion = direccion;
    }

    public String getFecha() {
        return fecha;
    }

    public void setFecha(String fecha) {
        this.fecha = fecha;
    }

    public static GestionImagenesInter getGii() {
        return gii;
    }

    public static void setGii(GestionImagenesInter gii) {
        LoginPropBean.gii = gii;
    }

    public String getIdcasater() {
        return idcasater;
    }

    public void setIdcasater(String idcasater) {
        this.idcasater = idcasater;
    }

    public String getIdestado() {
        return idestado;
    }

    public void setIdestado(String idestado) {
        this.idestado = idestado;
    }

    public String getNombrefoto() {
        return nombrefoto;
    }

    public void setNombrefoto(String nombrefoto) {
        this.nombrefoto = nombrefoto;
    }

    public String getNombreplano() {
        return nombreplano;
    }

    public void setNombreplano(String nombreplano) {
        this.nombreplano = nombreplano;
    }

    public String getPrecio() {
        return precio;
    }

    public void setPrecio(String precio) {
        this.precio = precio;
    }

    public String getTamanio() {
        return tamanio;
    }

    public void setTamanio(String tamanio) {
        this.tamanio = tamanio;
    }

    public String getTipo() {
        return tipo;
    }

    public void setTipo(String tipo) {
        this.tipo = tipo;
    }

    public String getCodcasa() {
        return codcasa;
    }

    public void setCodcasa(String codcasa) {
        this.codcasa = codcasa;
    }

    public String getDescDet() {
        return descDet;
    }

    public void setDescDet(String descDet) {
        this.descDet = descDet;
    }

    public List<String> getFotosDet() {
        
        return fotosDet;
    }

    public void setFotosDet(List<String> fotosDet) {
        this.fotosDet = fotosDet;
    }

    public String getIdDet() {
        return idDet;
    }

    public void setIdDet(String idDet) {
        this.idDet = idDet;
    }

    public String getRootdet() {
        return rootdet;
    }

    public void setRootdet(String rootdet) {
        this.rootdet = rootdet;
    }

    public String getRootfoto() {
        return rootfoto;
    }

    public void setRootfoto(String rootfoto) {
        this.rootfoto = rootfoto;
    }

    public String getRootplots() {
        return rootplots;
    }

    public void setRootplots(String rootplots) {
        this.rootplots = rootplots;
    }

    public CasaTerreno getCasaTerreno() {
        return casaTerreno;
    }

    public void setCasaTerreno(CasaTerreno casaTerreno) {
        this.casaTerreno = casaTerreno;
    }


    public CasaTerrenoDet getCasaDet() {
        return casaDet;
    }

    public void setCasaDet(CasaTerrenoDet casaDet) {
        this.casaDet = casaDet;
    }
    
    
    
}
